/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import java.io.Serializable;

/**
 *
 * @author Santos
 */
public class Pacote implements Serializable {

    private String nameOrigem;
    private String nameDestino;
    //no formato 0.0.0.0
    /**é constante, não será decrementado*/
    private int TTL_max;
    /** tempo de vida ou número de roteadores que pode passar até ser descartado
     */
    private int ttl;
    //private int quantidadeDeDados; //número máximo de caracteres que podem ser carregados no campo dados
    private String dados;       //carga útil do pacote
    /**
     * informa qual algorimo sera executado
     * se for 0 algoritmo de Dijkstra
     * se for 1 algoritmo de Bell
     */
  //  private int algoritmo;
    /**
     * Id do pacote para evitar ciclo no roteamento.
     */
    private int id;

    /**
     * Informações necessárias para criar o pacote
     * @param nameOrigem nome do no de origem
     * @param nameDestino nome do no de destino
     * @param ttl numero de passos que este pacote pode correr
     * @param dados carga util do pacote
     * @param id  identificação do pacote para evitar ciclos
     */
    public Pacote(String nameOrigem, String nameDestino, int ttl, String dados, int id) {
        this.TTL_max = ttl;
        this.ttl = ttl;
        this.nameDestino = nameDestino;
        this.nameOrigem = nameOrigem;
        this.dados = dados;
        this.id = id;
    }

    /**
     * Altera o algoritmo em uso
     * @param algoritmo 1 para Bell e 0 para Dijkstra.
     * 
     */
  //  public void setAlgoritmo(int algoritmo) {
      //  this.algoritmo = algoritmo;
    //}

    /**  obtem qual algorimo sera executado
     * se for 0 algoritmo de Dijkstra
     * se for 1 algoritmo de Bell
     * @return  numero do algoritmo em uso
     */
  //  public int getAlgoritmo() {
    //    return algoritmo;
    //}

    /**
     *Inseri a carga util de um pacote Ip
     * @param dados
     */
    public void inserirDados(String dados) {
        this.dados = dados;
    }

    /**
     *Retira a Carga Util de um pacote IP
     * @return
     */
    public String extrairDados() {
        return this.dados;
    }

    /**
     * é decrementado cada vez que passa em um roteador
     * @return
     */
    public int getTTL() {
        return this.ttl;
    }

    /**
     * é constante, ou seja, não é decrementado quando passa em um roteador
     * @return
     */
    public int getTTL_maximo() {
        return this.TTL_max;
    }

    /**
     * se passou em 6 roteadores e tinha o ttl igual a 10. TTL_max = 10 e ttl = 4, (num_roteadores = TTL_max - ttl;)
     * @return numero de roteadores percorridos.
     */
    public int getNumerosDeRoteadores() {
        return this.TTL_max - this.ttl;
    }
    //Não há métodos set's do ipOrigem,do ipDestino, nem do ttl, pois ambos não devem ser modificados durante
    //o caminho, apesar da NAT fazer isso.

    /**
     * 
     * @return
     */
    public String getNameDestino() {
        return nameDestino;
    }

    /**
     * 
     * @param nameDestino
     */
    public void setNameDestino(String nameDestino) {
        this.nameDestino = nameDestino;
    }

    /**
     * 
     * @return
     */
    public String getNameOrigem() {
        return nameOrigem;
    }

    /**
     * 
     * @param nameOrigem
     */
    public void setNameOrigem(String nameOrigem) {
        this.nameOrigem = nameOrigem;
    }

    /**
     * Obtem o id do Pacote
     * @return identificador do pacote.
     */
    public int getId() {
        return id;
    }

    /**
     * Altera o identificador do pacote.
     * @param id altera o id para um novo numero.
     */
    public void setId(int id) {
        this.id = id;
    }

    @Override
    public String toString() {
        return "Pacote{" + "nameOrigem=" + nameOrigem + ", nameDestino=" + nameDestino + ", TTL_max=" + TTL_max + ", ttl=" + ttl + ", dados=" + dados + ", id=" + id + '}';
    }

    /**
     * Altera o ttl do pacote para reduzir em menos um.
     */
    public void setTtl() {
        this.ttl--;
    }
}
